#音乐库= @加载动态库【“./音乐播放库.dll”】
#子弹音乐=#音乐库@播放音乐【“./res/sound/bullet.wav”，真】
#击中音乐=#音乐库@播放音乐【“./res/sound/enemy1_down.wav”，真】
#撞毁音乐=#音乐库@播放音乐【“./res/sound/game_over.wav”，真】

#窗 = @生成图形、《窗口 #标题=“飞机大战”，#宽=490，#高=892 【
    《列面板 #名=“#背景面板”，#宽=480，#高=1704，#X=0，#Y=-852 【
        《图片 #宽=480，#高=852，#源=“./res/image/background.png”》
        《图片 #宽=480，#高=852，#源=“./res/image/background.png”》
    】》
    
    《图片 #名=“#主角”，#源=“./res/image/hero1.png”，#X=192，#Y=650，#宽=102，#高=126》
    《文本标签 #名=“#得分标签”，#X=10，#Y=810，#字号=20，#文本=“0”》
    《按钮 #名=“#重新开始按钮”，#X=190，#Y=810，#字号=16，#宽=100，#文本=“重新开始”，#可见=“隐藏”》
】》


#运行中 = 真
#得分 = 0
#更新界面中 = 假
#下一方向 = “”
#主角图序 = 0
#子弹列表 = 【】
#敌机列表 = 【】

@检测碰撞 = @【#控件1，#控件2】｛
    #x1 ： #控件1#X
    #y1 ： #控件1#Y
    #w1 ： #控件1#宽
    #h1 ： #控件1#高
    
    #x2 ： #控件2#X
    #y2 ： #控件2#Y
    #w2 ： #控件2#宽
    #h2 ： #控件2#高
    
    返回
    #x1+#w1 大于 #x2
    且
    #x1 小于 #x2+#w2
    且
    #y1+#h1 大于 #y2
    且
    #y1 小于 #y2+#h2
｝

@最大敌机数 = @【】｛
    如果 #得分 小于 2｛
       返回 1   
    ｝再则 #得分 小于 6｛
        返回 2
    ｝再则 #得分 小于 12｛
        返回 3
    ｝再则 #得分 小于 20｛
        返回 4
    ｝再则 #得分 小于 30｛
        返回 5
    ｝再则 #得分 小于 50｛
        返回 6
    ｝否则｛
        返回 @转整数【#得分/10】
    ｝
｝

@创建敌机 = @【】｛
    #生成点X：10 + #数学库@随机数【420】
    #敌机对象：@｛
        #图片列表：【“./res/image/enemy1.png”，“./res/image/enemy1_down1.png”，“./res/image/enemy1_down2.png”，“./res/image/enemy1_down3.png”】
        #控件：@生成图形、《图片 #源=#图片列表#0，#X=#生成点X，#Y=-50，#宽=57，#高=43》
        #状态：0
        @销毁：@【】｛
            #状态 = 1
            @并行锁【#敌机列表，｛
                @取出【#敌机列表，@查找【#敌机列表，#敌机对象】】
            ｝】
            #定时器@停止【】           
            @延时任务【200，｛#控件#源=#图片列表#1｝】
            @延时任务【400，｛#控件#源=#图片列表#2｝】
            @延时任务【600，｛#控件#源=#图片列表#3｝】
            @延时任务【800，｛#窗@减子、#控件｝】
        ｝
        #定时器：@创建定时器【16，@【】｛
            如果 取反 #运行中 ｛ 返回 空 ｝
            如果 #状态 不等于 0 ｛ 返回 空 ｝
            #控件Y：#控件#Y
            如果 #控件Y 小于 852｛
                #控件#Y += 3
            ｝否则｛
                @销毁【】
            ｝
            
        ｝】
    ｝
    #窗@加子、#敌机对象#控件
    #敌机对象#定时器@启动【】
    @追加【#敌机列表，#敌机对象】
｝


@最小敌机Y = @【】｛
    #最小Y：999
    遍历 #敌机列表 为 #敌机｛
        如果 @转整数【#敌机#控件#Y】 小于 #最小Y｛
            #最小Y = @转整数【#敌机#控件#Y】
        ｝
    ｝
    返回 #最小Y
｝

#窗@键盘按下命令 = @【#按键】｛
    #下一方向 = #按键
｝
#窗@键盘放开命令 = @【#按键】｛
    #下一方向 = “”
｝

#主定时器 = @创建定时器【16，｛
    如果 取反 #运行中 或 #更新界面中｛ 返回 空 ｝
    #更新界面中 = 真
    
    如果 @转整数【#背景面板#Y】 小于 0｛
        #背景面板#Y = @转整数【#背景面板#Y】 + 1
    ｝否则｛
        #背景面板#Y = -852
    ｝
    
    #主角X ： @转整数、#主角#X
    #主角Y ： @转整数、#主角#Y
    如果 #下一方向 等于 “Left” 且 #主角X 大于 5｛
        #主角#X = #主角X - 5
    ｝
    如果 #下一方向 等于 “Right” 且 #主角X 小于 370｛
        #主角#X = #主角X + 5
    ｝
    如果 #下一方向 等于 “Up” 且 #主角Y 大于 10｛
        #主角#Y = #主角Y - 5
    ｝
    如果 #下一方向 等于 “Down” 且 #主角Y 小于 720｛
        #主角#Y = #主角Y + 5
    ｝
    
    如果 @取长度【#敌机列表】 小于 @最大敌机数【】 且 @最小敌机Y【】 大于 20｛
        @创建敌机【】
    ｝
    
    当 #序：0，#序 小于 @取长度【#子弹列表】，#序 自加 1｛
        #子弹：#子弹列表#序
        #子弹Y：@转整数、#子弹#Y
        如果 #子弹Y 大于 0｛
            #子弹#Y = #子弹Y - 10
        ｝否则｛
            #窗@减子、#子弹
            @取出【#子弹列表，#序】
            #序 自减 1
        ｝
    ｝
    
    当 #机序：0，#机序 小于 @取长度【#敌机列表】，#机序 自加 1｛
       #敌机：#敌机列表#机序
       当 #弹序：0，#弹序 小于 @取长度【#子弹列表】，#弹序 自加 1｛
            #子弹：#子弹列表#弹序
            如果 @检测碰撞【#子弹，#敌机#控件】｛
                #得分 自加 1
                #得分标签#文本 = #得分+“”
                #击中音乐@停止【】
                #击中音乐@播放【】
                #敌机@销毁【】
                @取出【#子弹列表，@查找【#子弹列表，#子弹】】               
                #窗@减子、#子弹
                #弹序 自减 1
                #机序 自减 1
            ｝
        ｝
        如果 @检测碰撞【#主角，#敌机#控件】｛
            #运行中 = 假
            #重新开始按钮#可见 = “可见”
            #撞毁音乐@播放【】
            @延时任务【200，｛#主角#源=“./res/image/hero_blowup_n1.png”｝】
            @延时任务【400，｛#主角#源=“./res/image/hero_blowup_n2.png”｝】
            @延时任务【600，｛#主角#源=“./res/image/hero_blowup_n3.png”｝】
        ｝
    ｝
    

    #更新界面中 = 假
    
｝】


#主角定时器 = @创建定时器【400，｛
    如果 取反 #运行中｛ 返回 空 ｝
    #主角图序 = （#主角图序+1）% 2
    如果 #主角图序 等于 0｛
        #主角#源 = “./res/image/hero1.png”
    ｝否则｛
        #主角#源 = “./res/image/hero2.png”
    ｝
｝】

#攻击定时器 = @创建定时器【400，｛
    如果 取反 #运行中 ｛ 返回  空 ｝
    #主角X ： @转整数、#主角#X
    #主角Y ： @转整数、#主角#Y
    
    #子弹：@生成图形、《图片 #源=“./res/image/bullet1.png”，#X=#主角X+50，#Y=#主角Y-8，#宽=5，#高=11》    
    #窗@加子、#子弹
    @追加【#子弹列表，#子弹】
    #子弹音乐@停止【】
    #子弹音乐@播放【】
｝】

#重新开始按钮@命令 = @【】｛
    #主角#源 = “./res/image/hero1.png”
    #主角#X = 192
    #主角#Y = 650
    #得分 = 0
    #得分标签#文本 = “0”
    遍历 #敌机列表 为 #敌机｛
        #窗@减子、#敌机#控件
        #敌机#定时器@停止【】
    ｝
    #敌机列表 = 【】
    遍历 #子弹列表 为 #子弹｛
        #窗@减子、#子弹
    ｝
    #子弹列表 = 【】
    #重新开始按钮#可见=“隐藏”
    #运行中 = 真
｝

@显示窗口、#窗
#主定时器@启动【】
#主角定时器@启动【】
#攻击定时器@启动【】















